home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 10 / 9 / DISK1095.ZIP / SCHEDMNT.PRG < prev    next >
Text File  |  1987-02-16  |  8KB  |  243 lines

  1. **SCHEDMNT
  2. * INPUT AND MODIFY MANUFACTURED PRODUCT REQUIREMENTS FILE, SCHEDULE
  3. SET HEADING OFF
  4. SET SAFETY OFF
  5. * FILE STRUCTURE MUST ALREADY EXIST
  6. CLEAR
  7. CLEAR ALL
  8. SET TALK OFF
  9. SET BELL OFF
  10. * DEFINE A STRING OF BLANKS
  11. STORE SPACE(80) TO BLANK
  12. * CLEAR REQUEST AND ACTION CONTROL VARIABLES
  13. STORE " " TO REQUEST
  14. STORE " " TO ACTION
  15. STORE "N" TO DATAIN
  16. STORE 0 TO RECCNT
  17. *
  18. *===============================START MODS: 1================================*
  19. * SET NAME OF FILE                                                           *
  20. STORE "SCHEDULE" TO FILENAME
  21. * SETUP COUNT OF INDEXES FOR THE FILE filename
  22. STORE 2 TO IXCOUNT
  23. * SETUP CONSTANTS CONTAINING INDEXES IN SEQUENCE TO USE IN MACRO LATER.
  24. * LIST EACH INDEX FIRST AS A PRIMARY INDEX. VARIABLES NAMED IXA, IXB, IXC, ETC.
  25. STORE "SKSTOCK,WKREQ" TO IXA
  26. * DEFINE KEYS FOR INDEX. IF NUMERIC, MUST CONVERT WITH STR(). USE DI+IXA, ETC.
  27. STORE "ASM_STKNO" TO DIIXA
  28. STORE "WKREQ,SKSTOCK" TO IXB
  29. STORE "STR(WEEK_REQD,4,1)" TO DIIXB
  30. *==================================END MODS==================================*
  31. *
  32. * SAVE NAME OF MACRO WHICH CONTAINS ACTIVE INDEX AS FIRST INDEX
  33. STORE "IXA" TO LIVE_IX
  34. * FIND RECORD COUNT
  35. USE &FILENAME
  36. COUNT TO RECCNT
  37. *  IF DBF FILE IS ZAPPED, THIS CONDITION PREVENTS 'RECORD OUT OF RANGE'
  38. *  ERROR FROM OCCURING WHEN ADD OPTION OF SUBMENU IS CHOSEN.
  39. IF RECCNT = 1
  40.    RECCNT = RECCNT-1
  41. ENDIF
  42. * IF FILE IS EMPTY, ASSUME INDEXES NOT CREATED AND CREATE THEM
  43.    IF RECCNT = 0 .AND. IXCOUNT>0
  44.    STORE 1 TO COUNT                      
  45.    DO WHILE COUNT<=IXCOUNT
  46.    STORE "IX"+CHR(64+COUNT) TO TEMP 
  47.    STORE "DI"+TEMP TO TEMP2
  48.    IF IXCOUNT>1
  49.      STORE SUBSTR(&TEMP,1,AT(",",&TEMP)-1) TO TEMP
  50.    ELSE
  51.      STORE &TEMP TO TEMP
  52.    ENDIF
  53.    STORE &TEMP2 TO TEMP2
  54.    INDEX ON &TEMP2 TO &TEMP
  55.    STORE COUNT+1 TO COUNT
  56.   ENDDO
  57.  ENDIF
  58. * ADD INDEXES
  59. SET INDEX TO &IXA
  60. * POSITION AT FIRST RECORD LIVE INDEX SEQUENCE FOR INITIAL DISPLAY
  61. GO TOP
  62. *
  63. * MAIN UPDATE LOOP. TERMINATE BY 'M' AS REQUEST
  64. DO WHILE REQUEST<>"M"
  65. *===============================START MODS: 2================================*
  66. * DISPLAY SCREEN MASK: HEADING INFORMATION PLUS LABELS FOR EACH FIELD        *
  67.    @ 1,22 SAY "SMITH'S BIKEWORKS INFORMATION SYSTEM"
  68.    @ 3,11 SAY ">> Production System Requirements Schedule Maintenance <<"
  69.    @ 5,17 SAY "Today's Date:"
  70.    ?? DATE()
  71. * SETUP VARIABLE PART OF MASK
  72.    CLEAR GETS
  73.    @ 7,1  SAY "Manufactured Product Stock Number " GET ASM_STKNO
  74.    @ 9,1  SAY "Number Required " GET NUMBER
  75. *
  76. *===============================START MODS: 2================================*
  77. * DISPLAY SCREEN MASK: HEADING INFORMATION PLUS LABELS FOR EACH FIELD        *
  78.    @ 1,22 SAY "SMITH'S BIKEWORKS INFORMATION SYSTEM"
  79.    @ 3,11 SAY ">> Production System Requirements Schedule Maintenance <<"
  80.    @ 5,17 SAY "Today's Date:"
  81.    ?? DATE()
  82. * SETUP VARIABLE PART OF MASK
  83.    CLEAR GETS
  84.    @ 7,1  SAY "Manufactured Product Stock Number " GET ASM_STKNO
  85.    @ 9,1  SAY "Number Required " GET NUMBER
  86.    @ 11,1  SAY "Week Required " GET WEEK_REQD
  87. * DATE OF LAST UPDATE SHOULD BE ONE OF THE FIELDS (LAST_UPDT)
  88.    @ 13,1 SAY "Last Updated : "
  89.    ?? LAST_UPDT
  90. *==================================END MODS==================================*
  91. *
  92. * DISPLAY VARIABLE DATA IN SCREEN HEADING
  93.    IF DELETE()
  94.       @ 5,1 SAY "* DELETED *"
  95.    ELSE
  96.       @ 5,1 SAY "           "
  97.    ENDIF
  98. * IDENTIFY RECORD
  99.    @ 5,62 SAY RECCNT
  100.    @ 5,50 SAY RECNO()
  101.    @ 5,43 SAY "Record"
  102.    @ 5,61 SAY "of"
  103. * IF DATAIN FLAG SET, ACTIVATE THE GETS
  104.    IF DATAIN="Y"
  105.       @ 19,72 GET ACTION
  106.       READ
  107. * DATE STAMP RECORD
  108.       REPLACE LAST_UPDT WITH DATE()
  109.       IF REQUEST="E".OR.ACTION<>"C"
  110.          STORE "N" TO DATAIN
  111.          STORE " " TO REQUEST
  112.          STORE " " TO ACTION
  113.       ENDIF 2
  114.    ELSE
  115.       CLEAR GETS
  116.    ENDIF 1
  117. *
  118. * DISPLAY CONTROL SUBMENU, CURRENT ACTIVE INDEX
  119.    @ 19,0 SAY BLANK
  120.    @ 20,0 SAY "----------------------------------------"
  121.    @ 20,40 SAY "----------------------------------------"
  122.    @ 21,0 CLEAR
  123.    @ 21,2 SAY ;
  124. "<F>ind Record  <A>dd Record   <D>elete/Recall  <E>dit Record   Current Active"
  125.    @ 22,2 SAY ;
  126. "<P>rev Record  <N>ext Record  <M>enu (return)  <K>ey Select    Key:          "
  127. * IF INDEX SET NAMED IN LIVE_IX HAS MULTIPLE ENTRIES, EXTRACT FIRST
  128.    IF (","$&LIVE_IX)
  129.       STORE SUBSTR(&LIVE_IX,1,AT(",",&LIVE_IX)-1) TO TEMP
  130.       @ 22,70 SAY TEMP
  131.    ELSE
  132.       @ 22,70 SAY &LIVE_IX
  133.    ENDIF
  134. * GET REQUEST AND FORCE TO UPPER CASE UNLESS ALREADY IN 'A' FOR ADD RECORDS
  135.    IF REQUEST<>"A"
  136.       STORE " " TO REQUEST
  137.       STORE " " TO ACTION
  138.       @ 23,10 SAY "          *** NEXT ACTION TO PERFORM " GET REQUEST
  139.       READ
  140.       STORE UPPER(REQUEST) TO REQUEST
  141.    ENDIF
  142. * CLEAR ADD RECORD COMMAND LINE, SUBMENU AREA
  143.    @ 21,0 CLEAR
  144.    DO CASE
  145. * ADD NEW CASE OR EDIT DISPLAYED CASE
  146.       CASE REQUEST="A".OR.REQUEST="E"
  147. * IN ADD MODE, APPEND A BLANK RECORD FOR THE DATA AND POSITION TO THAT RECORD
  148.          IF REQUEST="A"
  149.             @ 19,6 SAY "*** PRESS 'C' TO CONTINUE ADDING NEW RECS, ANYTHING ;
  150. ELSE TO QUIT"
  151.             APPEND BLANK
  152.             STORE RECCNT+1 TO RECCNT
  153.             GO RECCNT
  154.          ELSE
  155.             @ 19,6 SAY "******** PRESS ANY KEY TO FINISH EDIT AND RETURN TO ;
  156. SUBMENU     "
  157.          ENDIF
  158.          @ 21,10 SAY "Enter data at cursor position. Move among fields with"
  159.          @ 22,10 SAY "cursor control keys. Press ENTER to move to next field."
  160.          @ 23,10 SAY "Press ENTER alone to leave field unchanged."
  161. * SET FLAG TO CAUSE NEW DATA TO BE READ
  162.          STORE "Y" TO DATAIN
  163. * TOGGLE DELETE FLAG. * FUNCTION CHECKS IF RECORD NOW FLAGGED AS DELETED
  164.       CASE REQUEST="D"
  165.          IF DELETE()
  166.             RECALL
  167.          ELSE
  168.             DELETE
  169.          ENDIF
  170. * PREVIOUS RECORD IN ACTIVE INDEX SEQUENCE
  171.       CASE REQUEST="P"
  172.          SKIP -1
  173. * NEXT 3 LINES TO SECURE THE BACKWARD LOOP
  174.          IF BOF()
  175.             GO BOTTOM
  176.          ENDIF
  177. * NEXT RECORD IN ACTIVE INDEX SEQUENCE
  178.       CASE REQUEST="N"
  179.          SKIP +1
  180. * NEXT 3 LINES TO SECURE THE FORWARD LOOP
  181.          IF EOF()
  182.             GO TOP
  183.          ENDIF
  184. * GET SEARCH VALUE FOR INDEXED SEARCH
  185.       CASE REQUEST="F"
  186. * USE MACRO DEFINING INDEX ENTRIES FROM DATA FIELDS
  187.          STORE "DI"+LIVE_IX TO IXDEF
  188.          STORE &IXDEF TO SV
  189.          STORE &SV TO SV
  190.          @ 21,1 SAY ;
  191.          "ENTER SEARCH VALUE. VALUE SHOWN IS FROM THE DISPLAYED RECORD. PRESS"
  192.          @ 22,1 SAY "CTRL-Y TO CLEAR " GET SV
  193.          READ
  194. * REMOVE TRAILING BLANKS BEFORE SEARCH
  195.          STORE TRIM(SV) TO SEARCH
  196. * IF RECORD IS NOT FOUND DISPLAY STAYS AT CURRENT RECORD
  197. * NEXT LINE TO KEEP TRACK OF CURRENT RECNO() FOR TEST BELOW
  198.          STORE RECNO() TO NOW
  199.          SEEK SEARCH
  200. * NEXT 3 LINES KEEP PRESENT RECORD DISPLAYED IF NO FIND
  201.          IF EOF()
  202.             GOTO NOW                  
  203.          ENDIF
  204. * CHANGE INDEX
  205.       CASE REQUEST="K"
  206.          STORE RECNO() TO RECNOW
  207.          STORE " " TO IXCHOICE
  208. * SETUP MENU OF INDEX NAMES, PROVIDE IF CLAUSE FOR EACH INDEX                *
  209.          @ 21,9 SAY " "
  210.          STORE 1 TO COUNT
  211.          DO WHILE COUNT<=IXCOUNT
  212.             STORE "IX"+CHR(64+COUNT) TO TEMP
  213.             IF IXCOUNT>1
  214.                ?? CHR(64+COUNT)+". "+SUBSTR(&TEMP,1,AT(",",&TEMP)-1)+" "
  215.             ELSE
  216.                ?? CHR(64+COUNT)+". "+&TEMP
  217.             ENDIF
  218.             STORE COUNT+1 TO COUNT
  219.          ENDDO
  220.          @ 22,10 SAY "Press letter of desired key " GET IXCHOICE
  221.          READ
  222.          STORE UPPER(IXCHOICE) TO IXCHOICE
  223.          IF IXCHOICE>="A".AND.IXCHOICE<=CHR(64+IXCOUNT)
  224.             STORE "IX"+IXCHOICE TO LIVE_IX
  225.             STORE &LIVE_IX TO TEMP
  226.             SET INDEX TO &TEMP
  227.          ENDIF
  228. * GOTO THIS RECORD TO ACTIVATE INDEX
  229.          IF RECNOW>0
  230.             GO RECNOW
  231.          ELSE
  232.             GO BOTTOM
  233.          ENDIF
  234.    ENDCASE
  235. ENDDO
  236. * FALL OUT OF DO WHEN 'M' IS REQUEST, RETURN TO SUBSYSTEM'S MENU
  237. CLEAR
  238. USE SCHEDULE INDEX SKSTOCK
  239. REINDEX
  240. USE SCHEDULE INDEX WKREQ
  241. REINDEX
  242. RETURN
  243.